package utils

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"zinx/ziface"
)

type GlobalObj struct {
	TcpServer        ziface.IServer //当前Zinx的全局Server对象
	Host             string         //当前服务器的主机IP
	TcpPort          int            //当前服务器监听端口号
	Name             string         //当前服务器名称
	Version          string         //当前Zinx的版本号
	MaxPacketSize    uint32         //读取数据包的最大值
	MaxConn          int            //当前服务器主机允许的最大连接数
	WorkerPoolSize   uint32         //业务工作池worker的数量
	MaxWorkerTaskLen uint32         //业务工作Worker对应负责的任务队列的最大任务存储数量
	ConfFilePath     string         //config file path
	MaxMsgChanLen    uint32
}

/*
	定义一个全局的对象
*/

var GlobalObject *GlobalObj

//读取用户的配置文件
func (g *GlobalObj) Reload() {
	data, err := ioutil.ReadFile(g.ConfFilePath)
	if err != nil {
		panic(err)
	}
	//将json数据解析到struct中
	fmt.Println(string(data))
	err = json.Unmarshal(data, &g)
	if err != nil {
		panic(err)
	}
}

func init() {
	//初始化GlobalObject变量，设置一些默认值
	GlobalObject = &GlobalObj{
		Name:             "ZinxServerApp",
		Version:          "V0.4",
		TcpPort:          7777,
		Host:             "0.0.0.0",
		MaxConn:          12000,
		MaxPacketSize:    4096,
		WorkerPoolSize:   10,
		MaxWorkerTaskLen: 1024,
		MaxMsgChanLen:    500,
		ConfFilePath:     "/Users/chenang/go/src/zinx/conf/zinx.json",
	}
	//从配置文件中加载一些用户配置的参数
	GlobalObject.Reload()
}
